package analyzer

import (
	"ddl_checker/pkg/types"
)

// SQLAnalyzer 定义SQL分析器接口
type SQLAnalyzer interface {
	// ParseBatch 解析多条SQL语句，拆分成多条
	// 参数:
	//   - sql: 包含多条SQL语句的字符串
	//   - separator: SQL语句之间的分隔符，如果为空则使用默认的分号
	// 返回值:
	//   - []*SQLStatement: 解析后的SQL语句数组
	//   - error: 解析过程中的错误
	ParseBatch(sql string, separator string) ([]*SQLStatement, error)

	// ParseSingle 解析单条SQL语句
	// 参数:
	//   - sql: 单条SQL语句
	// 返回值:
	//   - *SQLStatement: 解析后的SQL语句
	//   - error: 解析过程中的错误
	ParseSingle(sql string) (*SQLStatement, error)

	// ValidateSQL 验证SQL语句的语法正确性
	// 参数:
	//   - sql: 要验证的SQL语句
	// 返回值:
	//   - bool: 语法是否正确
	//   - string: 错误信息，如果语法正确则为空字符串
	ValidateSQL(sql string) (bool, string)

	// SplitStatements 分割SQL语句，不进行语法解析
	// 参数:
	//   - sql: 包含多条SQL语句的字符串
	//   - separator: SQL语句之间的分隔符，如果为空则使用默认的分号
	// 返回值:
	//   - []string: 分割后的SQL语句数组
	//   - error: 分割过程中的错误
	SplitStatements(sql string, separator string) ([]string, error)
}

// SQLStatement 表示解析后的SQL语句
type SQLStatement struct {
	// OriginalSQL 原始的SQL语句
	OriginalSQL string `json:"original_sql"`

	// IsValid SQL语法是否正确
	IsValid bool `json:"is_valid"`

	// StatementType SQL语句类型
	StatementType types.StatementType `json:"statement_type"`

	// Tables SQL语句关联的表名列表
	Tables []string `json:"tables"`

	// Columns SQL语句关联的列名列表
	Columns []string `json:"columns"`

	// Operations SQL语句执行的操作列表（如SELECT, INSERT, CREATE_TABLE等）
	Operations []string `json:"operations"`

	// Error 错误信息，如果解析失败则包含错误描述
	Error string `json:"error,omitempty"`

	// Schema 数据库模式名（如果有）
	Schema string `json:"schema,omitempty"`

	// TableName 主表名（如果有）
	TableName string `json:"table_name,omitempty"`

	// ParserUsed 使用的解析器类型
	ParserUsed types.ParserUsed `json:"parser_used"`
}

// NewSQLStatement 创建新的SQLStatement实例
func NewSQLStatement(originalSQL string) *SQLStatement {
	return &SQLStatement{
		OriginalSQL:   originalSQL,
		IsValid:       false,
		StatementType: types.StatementTypeUnknown,
		Tables:        make([]string, 0),
		Columns:       make([]string, 0),
		Operations:    make([]string, 0),
		Error:         "",
		ParserUsed:    types.ParserUsedUnknown,
	}
}

// SQLAnalysisResult 表示SQL分析结果
type SQLAnalysisResult struct {
	// Statements 解析后的SQL语句数组
	Statements []*SQLStatement `json:"statements"`

	// TotalStatements 总语句数
	TotalStatements int `json:"total_statements"`

	// ValidStatements 有效语句数
	ValidStatements int `json:"valid_statements"`

	// InvalidStatements 无效语句数
	InvalidStatements int `json:"invalid_statements"`

	// Errors 错误信息列表
	Errors []string `json:"errors"`
}

// GetAnalysisResult 获取分析结果
func (r *SQLAnalysisResult) GetAnalysisResult() *SQLAnalysisResult {
	return r
}
